package es.javamyadmin.ajax;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import es.javamyadmin.modelo.ModelFacade;
import es.javamyadmin.modelo.Tables;
/**
 * Esta clase consulta el contenido de una tabla de la base de datos
 * y crea una tabla en html para mostrarla a través de ajax
 * @author Emilio Javier Castillo Gonzalez y Hector Delgado Duran
 *
 */
public class MostrarContenidoTablasAjax extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2764241984637852665L;

	/**
	 * Metodo que recoje los datos necesarios para consultar el contenido de una 
	 * tabla de la base de datos y crea una tabla a partir de ellos
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("<MostrarContenidoTablasAjax>");
		
		String contexto = request.getContextPath();
		
		String user = request.getParameter("usuario");
		String pass = request.getParameter("pass");
		String host = request.getParameter("servidor");
		String port = request.getParameter("puerto");
		String database = request.getParameter("bd");
		String table = request.getParameter("tabla");
		String elementosPagina = request.getParameter("elementos");
		String numeroPagina = request.getParameter("pag");
		
		System.out.println("u - " + user + ",bd - " + database + ", tabla - " + table);
		
		if(elementosPagina == null || elementosPagina.trim().equals("")){
			elementosPagina = "10";
		}
		if(numeroPagina == null || numeroPagina.trim().equals("")){
			numeroPagina = "1";
		}
		
		int elementos = 0;
		int pag = 0;
		
		try{
			elementos = Integer.parseInt(elementosPagina);
		}
		catch(NumberFormatException ex){
			ex.printStackTrace();
			elementos = 10;
		}
		
		try{
			pag = Integer.parseInt(numeroPagina);
		}
		catch(NumberFormatException ex){
			ex.printStackTrace();
			pag = 1;
		}
		
		String respuesta = "<table id='lista-tablas'><tbody>";
		Iterator<Tables> list = ModelFacade.getSelectPag(user, pass, host, port, database, table,elementos,pag).iterator();
		Iterator<Tables> subList;
		Collection<Tables> aux;
		Tables tabla;
		int fila = 0;
		int numColum = 2;
		int columna = 0;
		
		while(list.hasNext()){
			respuesta = respuesta + "<tr id='fila" + fila + "'>";
			tabla = list.next();
			aux = tabla.getSelect();
			numColum = aux.size();
			subList = aux.iterator();
			if(fila == 0 ){
				respuesta = respuesta + "<th style='border-radius:5px 0px 0px 0px;'></th>";
			}
			columna = 0;
			
			while(subList.hasNext()){
				if(fila == 0 ){
					String contenido = subList.next().getContenido();
					if(subList.hasNext()){
						respuesta = respuesta + "<th>" + contenido + "</th>";
					}else{
						respuesta = respuesta + "<th  style='border-radius:0px 5px 0px 0px;'>" + contenido + "</th>";
					}
				}
				else{
					if(columna == 0){
						respuesta = respuesta + "<td align='center'>";
						respuesta = respuesta + "<a data-toggle=\"modal\" href=\"#windowTitleDialog\" onclick=\"cargarDatosMsj('5', '"+fila+"', '');\" title='Eliminar fila'><img class=\"margen\" src=\""+contexto+"/images/icons/delete.png\" alt=\"eliminar\"/></a>";
						respuesta = respuesta + "</td>";
					}
					respuesta = respuesta + "<td align='center' ondblclick=\"dobleClick('" + columna + "','" + fila + "');\" title='Doble click para editar' >";
					respuesta = respuesta + "<span id='"+columna + "," + fila +"'>" + subList.next().getContenido() + "</span>";
					respuesta = respuesta + "</td>";
				}
				columna++;
			}
			if(fila == 0){
				fila = (pag * elementos) - elementos;
			}
			respuesta = respuesta + "</tr>";
			fila++;
		}
		
		if(fila == 1){
			respuesta = respuesta + "<td style='text-align: center;' colspan='" + (numColum + 1) + "'><p>La tabla esta vacía</h2></p>";
		}
		
		list = ModelFacade.getDescribe(user, pass, host, port, database, table).iterator();
		
		respuesta = respuesta + "<tr id='inserccion'>";
		respuesta = respuesta + "<td align='center'>";
		respuesta = respuesta + "<button type='button' onclick='insertarFila()' class='boton' style='text-align:center;' >Insertar</button>";
		respuesta = respuesta + "</td>";
		columna = 1;
		
		while(list.hasNext()){
			tabla = list.next();
			respuesta = respuesta + "<td align='center' >";
			respuesta = respuesta + "<input class='campo' type='text' onKeyPress='return insertarPorIntro(event);' title='" + tabla.getTipoColum() + "' id='insert" + columna + "' style='text-align:center;' placeholder='"+ tabla.getNombreColum() + "'>";
			respuesta = respuesta + "</td>";
			columna++;
		}
		
		respuesta = respuesta + "</tr>";
		respuesta = respuesta + "</tbody></table>";

		PrintWriter out = new PrintWriter(new OutputStreamWriter( response.getOutputStream(),"UTF8"), true);
	    try{
			out.print(respuesta);
		}finally{
			out.close();
		}
	}

}
